package locacoes;

public class RepositorioLocacoesArray implements RepositorioLocacoes{

	private Locacao[] locacoes;

	private int indice;

	public RepositorioLocacoesArray(int tamanho) {
		locacoes = new Locacao[tamanho];
		indice = 0;
	}

	public void inserir(Locacao locacao) {
		locacoes[indice] = locacao;
		indice = indice + 1;
	}

	public void atualizar(Locacao locacao) throws LocacaoNaoEncontradaException {
		int i = getIndiceLocacao(locacao.getCodigo());
		if (i == indice) {
			throw new LocacaoNaoEncontradaException();
		} else {
			locacoes[i] = locacao;
		}
	}

	public void remover(int numero) throws LocacaoNaoEncontradaException {
		int i = getIndiceLocacao(numero);
		if (i == indice) {
			throw new LocacaoNaoEncontradaException();
		} else {
			locacoes[i] = locacoes[indice - 1];
			indice = indice - 1;
		}
	}

	public Locacao procurar(int numero) throws LocacaoNaoEncontradaException {
		Locacao resposta;
		int i = getIndiceLocacao(numero);
		if (i == indice) {
			throw new LocacaoNaoEncontradaException();
		} else {
			resposta = locacoes[i];
		}
		return resposta;
	}

	public boolean existe(int numero) {
		boolean resposta;
		int i = getIndiceLocacao(numero);
		if (i == indice) {
			resposta = false;
		} else {
			resposta = true;
		}
		return resposta;
	}

	private int getIndiceLocacao(int numero) {
		int n;
		boolean achou = false;
		int i = 0;
		while ((!achou) && (i < indice)) {
			n = locacoes[i].getCodigo();
			if (n == numero) {
				achou = true;
			} else {
				i = i + 1;
			}
		}
		return i;
	}

	public IteratorLocacoes getIterator() {
		return new IteratorLocacoesArray(this.locacoes);
	}

}